<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>
    <div id="app">
      <h3>案例：全选、小选、反选</h3>
      <input type="checkbox" v-model="chkAll" />全选
      <hr />
      <div>
        <div v-for="(item,index) in list" :key="index">
          <input type="checkbox" v-model="item.isCheck" /> {{ item.name }}
        </div>
      </div>
    </div>

    <script src="./vue.js"></script>
    <script>
      new Vue({
        el: "#app",
        data: {
          list: [
            { name: "可爱多", isCheck: false },
            { name: "可乐", isCheck: false },
            { name: "橙汁", isCheck: false },
            { name: "椰汁", isCheck: false },
          ],
        },
        computed: {
          // // 简写形式:只有对计算属性取值，没有赋值，就意味着界面改变不会影响数据
          // chkAll () {
          //     // 数组中每一项都选中(true)，才能return true
          //     // 但凡有一个没选中(false) 都要return false
          //     return this.list.every( v => v.isCheck)
          // }

          // 完整形式
          chkAll: {
            set(val) {
              // 全选是true，让list里的每一项也为true
              // 全选是false，让list每一项都为false
              this.list.forEach((v) => (v.isCheck = val))
            },
            get() {
              // 对计算属性取值
              return this.list.every((v) => v.isCheck)
            },
          },
        },
      })
    </script>
  </body>
</html>
